package auxiliarDeClases;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.LinkedList;

import negocio.cv.CV;
import negocio.cv.ConocimientoIdioma;
import negocio.cv.Domicilio;
import negocio.cv.EstadoCivil;
import negocio.cv.Exigencia;
import negocio.cv.HerramientaInformatica;
import negocio.cv.Nacionalidad;
import negocio.cv.Nivel;
import negocio.cv.Persona;
import negocio.cv.ReferenciaEstudio;
import negocio.cv.ReferenciaLaboral;
import negocio.cv.Tarea;
import Empleados.ConsultarCandidato;
import Pantallas.AdministrarCV;

public class GestorCV {
private LinkedList<CV> cvs;
private ConsultarCandidato consultaCv;
private static GestorCV gestorCV=null;
	public GestorCV()
	{
		cvs=new LinkedList<CV>();
		AdministrarCV adminCv=new AdministrarCV(this);
		adminCv.setVisible(true);
		
		//TEMPORAL
		LinkedList<Tarea> tareas=new LinkedList<Tarea>();
		Tarea t=new Tarea("Operador de maquina");
		t.setIdTarea(2);
		t.setNivelDeExperiencia(new Nivel(2,"basico","",2));
		tareas.add(t);		

		CV curri=new CV(100,new Persona("Rodrigo","Perez","DNI",32685145,new Date("15/08/1980"),new Nacionalidad(),
				"3514587458",351,4565585,"rodrg@hotmail.com",new EstadoCivil(), "M"/*"Masculino"*/,"20-32685145",0,0,0,false,
				"Considerar",new Domicilio()),new Date(),false,new LinkedList<ReferenciaLaboral>(),
				new LinkedList<ReferenciaEstudio>(),null,null,true,true,0,tareas);
		curri.setExigencias(new LinkedList<Exigencia>());
		cvs.add(curri);
			
		gestorCV=this;
	}
	
	public boolean guardarCV(Persona persona,int numeroCV, LinkedList<ConocimientoIdioma> idiomas,
								LinkedList<ReferenciaEstudio> referenciasEstudio,float remuneracion,String observaciones,LinkedList<Exigencia> exigencias,
								LinkedList<ReferenciaLaboral> referenciasLaborales, LinkedList<Tarea> tareas,
								LinkedList<HerramientaInformatica>herramientas,String pathFoto)
	{
		CV cv=new CV();
		cv.setNumeroUbicacion(numeroCV);
		cv.setPersona(persona);
		cv.setReferenciasEstudio(referenciasEstudio);
		cv.setReferenciasLaborales(referenciasLaborales);
		cv.setTareas(tareas);
		cv.setRemunPretendioda(remuneracion);
		cv.setObservacion(observaciones);
		cv.setFechaRecepcion(new Date());
		cv.setExigencias(exigencias);
		cv.setIdiomas(idiomas);
		cv.setHerramientasInformaticas(herramientas);
		cv.setPathFoto(pathFoto);
		cvs.add(cv);
		return true;
		
		//guardar en la base de datos
	}

	public LinkedList<CV> getCvs() {
		return cvs;
	}

	public static GestorCV getInstance() {
		return gestorCV;
	}

	public void consultarCV() {
		/*consultaCv=new ConsultarCandidato(this,ConsultarCandidato.CONSULTAR_CV);
		consultaCv.setVisible(true);*/
		
	}

	/**
	 * Busca un CV filtrando por DNI o Nombre.
	 * @param dni
	 */
	public String[][] consultarCV(String data,boolean isDni) {
	String [][] tabla=null;	
	ArrayList<CV> encontrados=new ArrayList<CV>();
	int dni=isDni?Integer.parseInt(data):0;
	if(isDni)
	{
		for(CV cv: cvs)
	
		{
			if(cv.esMiDNI(dni))
			{
				encontrados.add(cv);
				break;
			}
		}
	}
	else{
		for(CV cv: cvs)
		{
			if(cv.esParteDeNombreOApellido(data))
				encontrados.add(cv);
		}
	}
	if(encontrados.size()>0)
	{
		tabla=new String[encontrados.size()][4];
	
		ComparaNombres comparaNombres=new ComparaNombres();
		Collections.sort(encontrados,comparaNombres);
	for (int i=0;i<encontrados.size();i++)
	{		
		tabla[i][0]=String.valueOf(encontrados.get(i).getPersona().getNroDocumento());
		tabla[i][1]=encontrados.get(i).getApellidoYNombre();
		tabla[i][2]=encontrados.get(i).getFechaRecepcion().toString();
		tabla[i][3]=encontrados.get(i).getObservacion();
	}
	
	}
	return tabla;
	}
	
	class ComparaNombres implements Comparator<CV>
	{
		//@Override
		public int compare(CV o1, CV o2) {
			return o1.getPersona().getApellido().compareTo(o2.getPersona().getApellido());
		}

		
		
	}

}
